Dynamic Data Masking (DDM) এবং Row-Level Security (RLS) হল SQL Server এর দুটি শক্তিশালী নিরাপত্তা বৈশিষ্ট্য, যা ডেটাবেসে সংবেদনশীল তথ্যের নিরাপত্তা বৃদ্ধি করতে ব্যবহৃত হয়। এই দুটি বৈশিষ্ট্য ডেটার অ্যাক্সেস নিয়ন্ত্রণ করতে সাহায্য করে, তবে ভিন্নভাবে কাজ করে। Dynamic Data Masking ব্যবহারকারীর কাছে কিছু ডেটা দৃশ্যমান না করলেও, ডেটাবেসের মধ্যে আসল ডেটা অপরিবর্তিত থাকে। অন্যদিকে, Row-Level Security ব্যবহারকারীর এক্সেস নিয়ন্ত্রণের মাধ্যমে নির্দিষ্ট সারি বা ডেটার একটি অংশ দেখার অনুমতি দেয়।
1. Dynamic Data Masking (DDM): পরিচিতি এবং ব্যবহার
Dynamic Data Masking (DDM) হল একটি ফিচার যা ডেটাবেসে সংরক্ষিত সংবেদনশীল তথ্যের কিছু অংশ মাস্ক (mask) করে প্রদর্শিত হতে দেয়। এটি সাধারণত সেই ক্ষেত্রে ব্যবহৃত হয় যেখানে একটি টেবিলের ডেটা কিছু ব্যবহারকারীর জন্য লুকানো রাখতে হয়, তবে অন্যান্য ব্যবহারকারীরা পুরো ডেটা দেখতে পায়। উদাহরণস্বরূপ, ক্রেডিট কার্ড নম্বর বা ফোন নম্বরের শেষ কিছু অক্ষর মাস্ক করা যেতে পারে, কিন্তু পূর্ণ নম্বর অ্যাডমিন বা অনুমোদিত ব্যবহারকারীদের জন্য দৃশ্যমান থাকবে।
1.1. Dynamic Data Masking এর প্রধান সুবিধাসমূহ
- নিরাপত্তা উন্নয়ন: ডেটাবেসের সংবেদনশীল তথ্যের কিছু অংশ মাস্ক করার মাধ্যমে, আপনি যে কোনো অপ্রত্যাশিত অ্যাক্সেস বা ম্যালিসিয়াস ইউজারদের কাছে সেই তথ্য লুকিয়ে রাখতে পারেন।
- ডেটার অখণ্ডতা বজায় রাখা: মাস্কিংয়ের ফলে ডেটাবেসের মধ্যে আসল ডেটা অপরিবর্তিত থাকে এবং আপনি কেবলমাত্র ব্যবহারের জন্য নির্দিষ্ট অংশ মাস্ক করতে পারেন।
- ব্যবহারকারীর অভিজ্ঞতা উন্নয়ন: এটির মাধ্যমে ব্যবহারকারীরা শুধুমাত্র প্রয়োজনীয় ডেটা দেখতে পারে, যা তাদের অভিজ্ঞতা উন্নত করে।
1.2. Dynamic Data Masking কিভাবে কাজ করে?
Dynamic Data Masking ডেটা মাস্কিং ফিচারটি টেবিলের কলামে একাধিক মাস্কিং প্যাটার্ন প্রয়োগ করতে পারে। আপনি প্রতিটি কলামের জন্য একটি মাস্ক নির্ধারণ করতে পারেন, যেমন:
- Default Masking: এটি পুরো ডেটা মাস্ক করবে, যেমন
XXX-XX-XXXXঅথবা****-****। - Email Masking: ইমেইল অ্যাড্রেসের কিছু অংশ মাস্ক করতে পারে, যেমন
user@domain.comএর পরিবর্তেu***@domain.com।
1.3. Dynamic Data Masking ব্যবহার করার উদাহরণ
যেমন, একটি Customer টেবিল রয়েছে, যেখানে গ্রাহকের CreditCardNumber কলাম রয়েছে, এবং আপনি চান যে গ্রাহকের পুরো ক্রেডিট কার্ড নম্বরটি সাধারণ ব্যবহারকারীর জন্য মাস্ক করা থাকুক, তবে অ্যাডমিনরা তা দেখতে পারবে।
CREATE TABLE Customer
(
CustomerID INT PRIMARY KEY,
CustomerName NVARCHAR(100),
CreditCardNumber NVARCHAR(16) MASKED WITH (FUNCTION = 'default()')
);
এই উদাহরণে, CreditCardNumber কলামটি মাস্ক করা হবে। যখন কোন সাধারণ ব্যবহারকারী এই কলামটি দেখবে, তখন তারা পুরো নম্বর দেখতে পাবে না, কিন্তু অ্যাডমিনরা এতে পূর্ণ অ্যাক্সেস পাবে।
1.4. Dynamic Data Masking এর সীমাবদ্ধতা
- সামগ্রিকভাবে মাস্ক করা: মাস্কিং শুধুমাত্র কুয়েরি স্তরের ডেটা পরিবর্তন করে, ডেটাবেসের মধ্যে আসল ডেটা অপরিবর্তিত থাকে।
- বিশেষ অ্যাক্সেস কন্ট্রোল: মাস্কিং শুধুমাত্র ইউজার কুয়েরি অনুসারে কাজ করবে, তবে এটি সিস্টেম অ্যাডমিনিস্ট্রেটরদের উপর প্রভাব ফেলে না।
2. Row-Level Security (RLS): পরিচিতি এবং ব্যবহার
Row-Level Security (RLS) হল একটি SQL Server ফিচার যা ব্যবহারকারীদের উপর নির্ভর করে টেবিলের নির্দিষ্ট সারি অ্যাক্সেস করতে অনুমতি দেয়। এই নিরাপত্তা ব্যবস্থা একটি Security Predicate ব্যবহার করে কাজ করে, যা প্রতিটি রো (row) থেকে ডেটা ফিল্টার করতে সক্ষম। এর মাধ্যমে, বিভিন্ন ব্যবহারকারীরা একই টেবিল থেকে বিভিন্ন ডেটা দেখতে পারে, নির্দিষ্ট ব্যবহারকারীদের জন্য প্রাসঙ্গিক রেকর্ডগুলো প্রদর্শিত হবে এবং অন্যরা তা দেখতে পাবে না।
2.1. Row-Level Security এর প্রধান সুবিধাসমূহ
- ডেটার এক্সেস নিয়ন্ত্রণ: RLS ব্যবহার করে আপনি টেবিলের মধ্যে কোন ব্যবহারকারী কোন সারি দেখতে পাবে তা নিয়ন্ত্রণ করতে পারেন, যা খুব কার্যকরী যখন আপনার ডেটাবেসে অনেক ব্যবহারকারী থাকে।
- অ্যাক্সেস কন্ট্রোলের একক পদ্ধতি: RLS আপনাকে সেন্ট্রালাইজড এবং স্কেলেবল নিরাপত্তা প্রদান করে, যেখানে প্রতিটি ইউজারের উপর নির্ভর করে ডেটা অ্যাক্সেস নির্ধারণ করা হয়।
- অ্যাপ্লিকেশন নিরাপত্তার সুবিধা: RLS ডেটাবেস স্তরে নিরাপত্তা চালু করতে সহায়তা করে, ফলে অ্যাপ্লিকেশন কোডে পরিবর্তন করার প্রয়োজন হয় না।
2.2. Row-Level Security কিভাবে কাজ করে?
RLS কাজ করে একটি Security Policy ব্যবহার করে, যা সারির অ্যাক্সেস নিয়ন্ত্রণের জন্য predicate ফাংশন ব্যবহার করে। এই পদ্ধতিতে, আপনি ডেটার কোন অংশ ব্যবহারকারীদের জন্য দৃশ্যমান থাকবে তা নিয়ন্ত্রণ করতে পারেন।
2.3. Row-Level Security ব্যবহার করার উদাহরণ
ধরা যাক, একটি Employee টেবিল রয়েছে, এবং আপনি চান যে শুধুমাত্র একেকটি বিভাগ (Department) এর কর্মচারীরা তাদের নিজ বিভাগের তথ্য দেখতে পাবে। এই পরিস্থিতিতে Security Predicate এবং Security Policy ব্যবহার করে এটি কার্যকর করা যাবে।
Security Predicate ফাংশন তৈরি করা:
CREATE FUNCTION dbo.fn_EmployeeAccessPredicate(@DepartmentID INT) RETURNS TABLE AS RETURN (SELECT 1 AS AccessGranted WHERE @DepartmentID = USER_ID());Security Policy তৈরি করা:
CREATE SECURITY POLICY EmployeeAccessPolicy ADD FILTER PREDICATE dbo.fn_EmployeeAccessPredicate(DepartmentID) ON dbo.Employee;
এখানে EmployeeAccessPredicate ফাংশনটি ব্যবহারকারীকে শুধুমাত্র তাদের নিজ বিভাগের কর্মচারীদের তথ্য দেখতে অনুমতি দেবে। অন্যদের জন্য অন্যান্য বিভাগের তথ্য দৃশ্যমান হবে না।
3. Row-Level Security এবং Dynamic Data Masking এর পার্থক্য
| বৈশিষ্ট্য | Dynamic Data Masking | Row-Level Security |
|---|---|---|
| প্রধান উদ্দেশ্য | সংবেদনশীল ডেটা মাস্ক করা | ব্যবহারকারীর ডেটা এক্সেস নিয়ন্ত্রণ |
| কিভাবে কাজ করে? | ডেটা আংশিকভাবে মাস্ক করা | নির্দিষ্ট রো অ্যাক্সেস নিয়ন্ত্রণ |
| ব্যবহারকারী অ্যাক্সেস | কুয়েরি অনুযায়ী ডেটা মাস্ক করা | সারি অনুযায়ী ডেটা অ্যাক্সেস সীমাবদ্ধ |
| পারফরম্যান্স | কম পারফরম্যান্সে ডেটা পরিবর্তন | সারি ফিল্টার করা, পারফরম্যান্স প্রভাব ফেলতে পারে |
| ডেটাবেস অ্যাক্সেস কন্ট্রোল | কেবলমাত্র ডেটার দৃশ্যমানতা নিয়ন্ত্রণ | সারি-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ |
সারাংশ
Dynamic Data Masking এবং Row-Level Security হল SQL Server-এ দুটি শক্তিশালী নিরাপত্তা ফিচার। DDM সংবেদনশীল তথ্যের কিছু অংশ মাস্ক করে প্রদর্শন করে, তবে ডেটাবেসের মধ্যে আসল ডেটা অপরিবর্তিত থাকে। অপরদিকে, RLS ব্যবহারকারীদের অ্যাক্সেস কন্ট্রোলের মাধ্যমে নির্দিষ্ট সারি বা রেকর্ডের জন্য ডেটা অ্যাক্সেস সীমাবদ্ধ করে। এই দুটি ফিচারই ডেটাবেসের নিরাপত্তা এবং ব্যবস্থাপনা কার্যক্রমে সহায়ক, তবে তাদের ব্যবহারের উদ্দেশ্য এবং কার্যকরীতা আলাদা।
Read more